/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is Forte for Java, Community Edition. The Initial
* Developer of the Original Code is Sun Microsystems, Inc. Portions
* Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.modules.web.wizards.beanjsp.ui;
import org.netbeans.modules.web.wizards.beanjsp.model.*;
import org.netbeans.modules.web.wizards.wizardfw.*;
import org.netbeans.modules.web.wizards.beanjsp.ide.netbeans.*;
import org.netbeans.modules.web.util.*;
import org.netbeans.modules.web.wizards.beanjsp.util.*;
import org.openide.util.*;
import org.openide.loaders.DataFolder;
import org.openide.filesystems.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;
public class JSPBeansSelectionPanel extends StandardWizardPanel {
public JSPBeansSelectionPanel() {
this(JSPPage.INPUT_PAGE);
}
public JSPBeansSelectionPanel(int pageType) {
super();
this.pageType = pageType;
initComponents ();
setButtonsEnabled();
addSelectionListeners();
addDoubleClickListeners();
}
/*public HelpCtx getHelp () {
return new HelpCtx (JSPBeansSelectionPanel.class);
}*/
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the FormEditor.
*/
private void initComponents () {//GEN-BEGIN:initComponents
java.util.ResourceBundle resBundle = NbBundle.getBundle(JSPPageWizard.i18nBundle);
//// create components
this.setTopMessage(resBundle.getString("JBW_JSPBeansSelectionMsg")); // NOI18N
beanPackagePanel = new javax.swing.JPanel();
beanPackageMsg = new MultiLineLabel(resBundle.getString("JBW_BeanPackageMsg")); // NOI18N
beanPackageLabel = new JLabel(resBundle.getString("JBW_BeanPackageLabel")); // NOI18N
beanPackageTF = new javax.swing.JTextField (30);
// beanPackageTF.setEnabled(false);
beanPackageTF.setEditable(false);
beanPackageTF.setBackground (java.awt.Color.lightGray);
beanPackageBrowseB = new JButton (resBundle.getString("JBW_BeanPackageBrowseBLabel")); // NOI18N
// netbeans convention
beanPackageBrowseB.setFont (new java.awt.Font ("SansSerif", 0, 11)); // NOI18N
beanPackageBrowseB.setMinimumSize (new java.awt.Dimension(85, 15));
beanPackageBrowseB.setMaximumSize (new java.awt.Dimension(85, 27));
beanPackageBrowseB.setPreferredSize (new java.awt.Dimension(85, 25));
beansLabel = new JLabel(resBundle.getString("JBW_JSPBeansListName")); // NOI18N
beansList = new JList();
beansSPane = new JScrollPane(beansList);
beansSPane.setPreferredSize (new java.awt.Dimension(150, 150));
beansSPane.setMinimumSize (new java.awt.Dimension(150, 150));
beansSPane.setMaximumSize (new java.awt.Dimension(150, 150));
//NB beansRepository = RepositoryBeanViewPane.createRepositoryBeanViewPane();
useBeansLabel = new JLabel(resBundle.getString("JBW_JSPBeansTableName")); // NOI18N
useBeansTable = new JSPUseBeanTable();
buttonsPanel = new javax.swing.JPanel();
addButton = new javax.swing.JButton ();
addButton.setText (resBundle.getString("JBW_AddButton")); // NOI18N
//addButton.setMinimumSize (new java.awt.Dimension(73, 15));
//addButton.setMaximumSize (new java.awt.Dimension(100, 27));
removeButton = new javax.swing.JButton ();
removeButton.setText (resBundle.getString("JBW_RemoveButton")); // NOI18N
//removeButton.setMinimumSize (new java.awt.Dimension(73, 15));
//removeButton.setMaximumSize (new java.awt.Dimension(100, 27));
moveUpButton = new javax.swing.JButton ();
moveUpButton.setText (resBundle.getString("JBW_MoveUpButton")); // NOI18N
//moveUpButton.setMinimumSize (new java.awt.Dimension(73, 15));
//moveUpButton.setMaximumSize (new java.awt.Dimension(100, 27));
moveDownButton = new javax.swing.JButton ();
moveDownButton.setText (resBundle.getString("JBW_MoveDownButton")); // NOI18N
//moveDownButton.setMinimumSize (new java.awt.Dimension(73, 15));
//moveDownButton.setMaximumSize (new java.awt.Dimension(100, 27));
//// layout and add components
arrangeComponents();
//// create and add listeners
beansListModel = JSPPageWizard.simpleJSPPage.getAvailableBeansModel();
beansList.setModel(beansListModel);
useBeansTableModel = JSPPageWizard.simpleJSPPage.getJSPBeansModel();
this.useBeansTable.setTableModel(useBeansTableModel);
addButton.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent evt) {
addToUseBeansList();
}
});
removeButton.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent evt) {
removeFromUseBeansList();
}
});
moveUpButton.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent evt) {
moveUpUseBean();
}
});
moveDownButton.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent evt) {
moveDownUseBean();
}
});
beanPackageBrowseB.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent evt) {
browseForBeanPacakge();
loadBeansFromBeanPackage();
}
});
}//GEN-END:initComponents
//// layout components in
private void arrangeComponents() {
createBeanPackageComponents();
createButtonPanelComponents();
arrangeCompsWithGridBag();
}
private void addGridBagComponent(Container parent, Component comp,
int gridx, int gridy, int gridwidth, int gridheight,
double weightx, double weighty,
int anchor, int fill,
Insets insets, int ipadx, int ipady
) {
GridBagConstraints cons = new GridBagConstraints();
cons.gridx = gridx;
cons.gridy = gridy;
cons.gridwidth = gridwidth;
cons.gridheight = gridheight;
cons.weightx = weightx;
cons.weighty = weighty;
cons.anchor = anchor;
cons.fill = fill;
cons.insets = insets;
cons.ipadx = ipadx;
cons.ipady = ipady;
parent.add(comp,cons);
}
public void createBeanPackageComponents() {
beanPackagePanel.setLayout(new GridBagLayout());
Component packPanelSep = Box.createVerticalStrut(2);
int gridy = 0;
addGridBagComponent(this.beanPackagePanel,beanPackageMsg,
0,gridy,3,1,
0,0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(2,2,2,2),5,5 );
addGridBagComponent(this.beanPackagePanel,beanPackageLabel,
0,++gridy,1,1,
0,0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(2,2,2,2),5,5 );
addGridBagComponent(this.beanPackagePanel,beanPackageTF,
1,gridy,1,1,
100,0,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(2,2,2,2),5,5 );
addGridBagComponent(this.beanPackagePanel,beanPackageBrowseB,
2,gridy,1,1,
0,0,
GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
new Insets(2,2,2,2),5,5 );
addGridBagComponent(this.beanPackagePanel,packPanelSep,
0,++gridy,3,1,
100,100,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(2,2,2,2),5,5 );
}
private void createButtonPanelComponents() {
this.buttonsPanel.setLayout(new GridBagLayout());
Component moveGap = Box.createVerticalStrut(6);
Component remainderGlue = Box.createGlue();
addGridBagComponent(this.buttonsPanel,addButton,
0,0,1,1,
100,00,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(2,2,2,2),5,5 );
addGridBagComponent(this.buttonsPanel,removeButton,
0,1,1,1,
100,0,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(2,2,2,2),5,5 );
addGridBagComponent(this.buttonsPanel,moveGap,
0,2,1,1,
100,0,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(2,2,2,2),5,5 );
addGridBagComponent(this.buttonsPanel,moveUpButton,
0,3,1,1,
100,0,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(2,2,2,2),5,5 );
addGridBagComponent(this.buttonsPanel,moveDownButton,
0,4,1,1,
100,0,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(2,2,2,2),5,5 );
addGridBagComponent(this.buttonsPanel,remainderGlue,
0,5,1,1,
100,100,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(2,2,2,2),5,5 );
}
private void arrangeCompsWithGridBag() {
this.contentPane.setLayout(new GridBagLayout());
int gridy = 0;
addGridBagComponent(this.contentPane,beanPackagePanel,
0,gridy,3,1,
0,0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(2,2,2,2),5,5 );
addGridBagComponent(this.contentPane,beansLabel,
0,++gridy,1,1,
0,0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(2,2,2,2),5,5 );
addGridBagComponent(this.contentPane,useBeansLabel,
2,gridy,1,1,
100,0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(2,2,2,2),5,5 );
addGridBagComponent(this.contentPane,beansSPane,
0,++gridy,1,1,
0,100,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(2,2,2,2),5,5 );
addGridBagComponent(this.contentPane,buttonsPanel,
1,gridy,1,1,
0,100,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(2,2,2,2),5,5 );
addGridBagComponent(this.contentPane,useBeansTable,
2,gridy,1,1,
100,100,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(2,2,2,2),5,5 );
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JScrollPane beansSPane;
private javax.swing.JList beansList;
private javax.swing.JLabel beansLabel;
//NB private RepositoryBeanViewPane beansRepository;
private javax.swing.JPanel buttonsPanel;
private javax.swing.JButton addButton;
private javax.swing.JButton removeButton;
private javax.swing.JButton moveUpButton;
private javax.swing.JButton moveDownButton;
private javax.swing.JLabel useBeansLabel;
private JSPUseBeanTable useBeansTable;
private javax.swing.JPanel beanPackagePanel;
private MultiLineLabel beanPackageMsg;
private javax.swing.JLabel beanPackageLabel;
private javax.swing.JTextField beanPackageTF;
private javax.swing.JButton beanPackageBrowseB;
// store locally for avoiding reloading beans when same pacakge is selected multiple
// times or when navigating back and forth from this panel
DataFolder beanPakFolder = null;
private JSPItemListModel beansListModel;
private JSPBeanTableModel useBeansTableModel;
private int pageType = JSPPage.INPUT_PAGE;
// End of variables declaration//GEN-END:variables
public void addToUseBeansList() {
int[] idx = beansList.getSelectedIndices();
int oldRows = useBeansTable.getTable().getRowCount();
if( (idx.length > 0) && (idx[0] >= 0)) {
for (int i=0; i<idx.length; i++) {
// Object obj = beansListModel.remove(idx);
JSPBean jspBean = (JSPBean) beansListModel.get(idx[i]);
useBeansTableModel.add((JSPBean)jspBean.clone());
}
int rows = useBeansTable.getTable().getRowCount();
useBeansTable.getTable().getSelectionModel().setSelectionInterval(
oldRows, rows-1);
setButtonsEnabled();
}
}
public void removeFromUseBeansList() {
int[] idx = useBeansTable.getTable().getSelectedRows();
int count = 0;
if((idx.length > 0) && (idx[0] >= 0)) {
for (int i=0; i<idx.length; i++) {
// always remove item 0, since index gets rearranged
Object obj = useBeansTableModel.remove(idx[0]-count);
count++;
}
setButtonsEnabled();
}
}
public void moveUpUseBean() {
int[] idx = useBeansTable.getTable().getSelectedRows();
if((idx.length > 0) && (idx[0] > 0 )) {
for (int i=0; i<idx.length; i++){
// idx = useBeansTableModel.moveUp(idx);
useBeansTableModel.moveUp(idx[i]);
}
useBeansTable.getTable().getSelectionModel().setSelectionInterval(
idx[0]-1, idx[idx.length-1]-1);
checkButtons();
}
}
public void moveDownUseBean() {
int[] idx = useBeansTable.getTable().getSelectedRows();
int rowCount = useBeansTable.getTable().getRowCount();
if((idx.length >0) && (idx[0] >= 0) && (idx[idx.length-1] < rowCount-1)) {
for (int i=idx.length-1; i>=0; i--){
useBeansTableModel.moveDown(idx[i]);
}
useBeansTable.getTable().getSelectionModel().setSelectionInterval(
idx[0]+1,idx[idx.length-1]+1);
checkButtons();
}
}
public void setButtonsEnabled(){
checkAddButton();
checkButtons();
}
private void checkAddButton(){
if ((beansListModel.getSize() > 0) && (beansList.getSelectedIndex()>=0))
addButton.setEnabled(true);
else
addButton.setEnabled(false);
}
private void checkButtons(){
int rows = useBeansTable.getTable().getRowCount();
int[] srow = useBeansTable.getTable().getSelectedRows();
if ((rows > 0) && (srow.length >0)){
removeButton.setEnabled(true);
} else {
removeButton.setEnabled(false);
}
if ((rows > 1) && (srow.length >0) && (srow[0] > 0)){
moveUpButton.setEnabled(true);
} else {
moveUpButton.setEnabled(false);
}
if ((rows > 1) && (srow.length >0) && (srow[srow.length -1] < rows -1)){
moveDownButton.setEnabled(true);
} else {
moveDownButton.setEnabled(false);
}
}
private void addSelectionListeners(){
beansList.addListSelectionListener(new ListSelectionListener(){
public void valueChanged(ListSelectionEvent e){
checkAddButton();
}
});
useBeansTable.getTable().getSelectionModel().addListSelectionListener(
new ListSelectionListener(){
public void valueChanged(ListSelectionEvent e){
checkButtons();
}
});
}
private void addDoubleClickListeners(){
beansList.addMouseListener (new java.awt.event.MouseAdapter () {
public void mouseClicked (java.awt.event.MouseEvent evt) {
beansListMouseClicked(evt);
}
});
useBeansTable.getTable().addMouseListener (new java.awt.event.MouseAdapter () {
public void mouseClicked (java.awt.event.MouseEvent evt) {
useBeansTableMouseClicked(evt);
}
});
}
private void beansListMouseClicked(java.awt.event.MouseEvent evt) {
if (evt.getClickCount() == 2) {
addToUseBeansList();
}
}
private void useBeansTableMouseClicked(java.awt.event.MouseEvent evt) {
if (evt.getClickCount() == 2) {
removeFromUseBeansList();
}
}
/* this method gets called on next && prev */
public void storeSettings (Object settings) {
JSPPageWizard.updateBizMethodsPanel();
JSPPageWizard.updateDisplayFieldsPanel();
JSPPageWizard.updateInputFieldsPanel();
}
//// bean pacakge selection methods
private void loadBeansFromBeanPackage() {
if(beanPakFolder != null) {
if(JSPPageWizard.beanPakFolder == null) {
JSPPageWizard.beanPakFolder = beanPakFolder;
} else if(JSPPageWizard.beanPakFolder.getName().equals(beanPakFolder.getName())){
return;
} else {
JSPPageWizard.beanPakFolder = beanPakFolder;
}
loadBeansList();
JSPPageWizard.updateBeanSelectionPanel();
}
}
private void browseForBeanPacakge() {
beanPakFolder = IDEHelper.browseForBeanPackage();
String beanPackageName = ""; // NOI18N
if(beanPakFolder != null) {
beanPackageName = beanPakFolder.getPrimaryFile().getPackageName('.');
}
beanPackageTF.setText(beanPackageName);
}
public void loadBeansList() {
Vector javaBeans = IDEHelper.findBeansInFolder(JSPPageWizard.beanPakFolder);
JSPVector jspBeans = (JSPVector) JSPPage.beanManager.createValidJSPBeans(javaBeans);
// JSPVector jspBeans = (JSPVector) JSPPage.beanManager.getValidJSPBeans(basePath,packageName);
// Debug.println("Loading jsp beans: "+jspBeans.size());
JSPPageWizard.simpleJSPPage.loadBeansList(jspBeans);
}
public static void main(String[] args) {
if( Debug.TEST ) {
JFrame testFrame = new JFrame("This is Test Frame"); // NOI18N
testFrame.getContentPane().add(new JSPBeansSelectionPanel(),SwingConstants.CENTER);
testFrame.setSize(500,300);
testFrame.pack();
testFrame.show();
}
}
}